﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAL.Entities;
using BAL;
using System.Configuration;
using System.Globalization;

namespace GrouponDesktop.HistorialCupones
{
    public partial class HistorialCuponesFrm : Form
    {
        private ClienteEntity _cliente;
        private ClienteBAL _clienteBAL;

        public HistorialCuponesFrm(UsuarioEntity usuario)
        {
            InitializeComponent();
            this._clienteBAL = new ClienteBAL();

            this._cliente = this._clienteBAL.GetClienteByUserId(usuario.IntIdUsuario);

            this.lblFechaActual.Text = ConfigurationSettings.AppSettings["actualDate"].ToString();
            this.lblUserName.Text += usuario.VarUsername;

            this.ConfigurarMounthCalendar();
            this.ConfigurarGrilla();
        }

        private void ConfigurarMounthCalendar()
        {
            DateTime fechaActual = DateTime.Parse(this.lblFechaActual.Text);

            this.mcNewFecha.TodayDate = fechaActual;
            this.mcOldFecha.TodayDate = fechaActual;
            this.mcOldFecha.MaxDate = fechaActual;
            this.mcNewFecha.MaxDate = fechaActual;
            this.mcNewFecha.SetDate(fechaActual);
            this.mcOldFecha.SetDate(fechaActual);
        }

        private void ConfigurarGrilla()
        {
            this.dgCupones.BorderStyle = BorderStyle.FixedSingle;
            this.dgCupones.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
            this.dgCupones.RowHeadersVisible = false;
            this.dgCupones.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            this.dgCupones.RowsDefaultCellStyle.SelectionBackColor = Color.White;
            this.dgCupones.RowsDefaultCellStyle.SelectionForeColor = ForeColor;
            this.dgCupones.MultiSelect = false;
            this.dgCupones.RowTemplate.Resizable = DataGridViewTriState.False;
            this.dgCupones.AllowUserToAddRows = false;
            this.dgCupones.RowTemplate.Height = 20;
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnListar_Click(object sender, EventArgs e)
        {
            try
            {
                CuponBAL cuponBAL = new CuponBAL();
                List<CuponEntity> cupones = cuponBAL.GetCuponesClienteByFechas(this._cliente.IntIdCliente, this.mcNewFecha.SelectionEnd, this.mcOldFecha.SelectionEnd);

                if (cupones.Count > 0)
                {
                    DataTable dt = this.CrearDataTableCupones(cupones);

                    this.dgCupones.DataSource = dt;

                    this.dgCupones.Columns["Codigo"].Width = 95;
                    this.dgCupones.Columns["FechaCompra"].Width = 70;
                    this.dgCupones.Columns["Proveedor"].Width = 120;
                    this.dgCupones.Columns["Rubro"].Width = 70;
                    this.dgCupones.Columns["Descripcion"].Width = 300;
                    this.dgCupones.Columns["Precio"].Width = 40;
                    this.dgCupones.Columns["Estado"].Width = 70;

                    this.lblCantidad.Text = "Cantidad: " + this.dgCupones.RowCount.ToString();
                }
                else
                {
                    MessageBox.Show("No se encontraron cupones para las fechas especificadas", "Historial Consumo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error: " + ex.Message, "Historial Consumo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private DataTable CrearDataTableCupones(List<CuponEntity> cupones)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("Codigo", typeof(string));
            dt.Columns.Add("FechaCompra", typeof(DateTime));
            dt.Columns.Add("Proveedor", typeof(string));
            dt.Columns.Add("Rubro", typeof(string));
            dt.Columns.Add("Precio", typeof(string));
            dt.Columns.Add("Descripcion", typeof(string));
            dt.Columns.Add("Estado", typeof(string));

            foreach (CuponEntity cupon in cupones)
            {
                dt.Rows.Add(cupon.CodigoCupon, cupon.FechaCompra, cupon.ProveeRS, cupon.Rubro, "$" + cupon.DetalleCupon.Precio.ToString(), cupon.DetalleCupon.Descripcion, cupon.Estado);
            }

            return dt;
        }
    }
}
